package com.xmg.leetCode;

import java.util.ArrayList;
import java.util.List;

/**
 * 将一个给定字符串 s 根据给定的行数 numRows ，以从上往下、从左到右进行 Z 字形排列。
 *
 * 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时，排列如下：
 *
 * P   A   H   N
 * A P L S I I G
 * Y   I   R
 * 之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如："PAHNAPLSIIGYIR"。
 *
 * 请你实现这个将字符串进行指定行数变换的函数：
 *
 * string convert(string s, int numRows);
 *
 * 思路：每一行保存在一个StringBuilder中，当line为0时，line递增遍历，line为nums-1时，向上遍历
 */
public class No6 {
    public static void main(String[] args) {
        System.out.println(Solution6.convert("AB",3));
    }
}

class Solution6 {
    public static String convert(String s, int numRows) {
        if(s.length()<2 || numRows==1){
            return s;
        }
        List<StringBuilder> sblist = new ArrayList<>();

        for (int i = 0; i < numRows; i++) {
            sblist.add(new StringBuilder());
        }
        int line = 0;
        boolean flag = true;//true 向下遍历  false向上遍历
        for (int i = 0; i < s.length(); i++) {
            if(line == 0){
                flag = true;
            }
            if(line==numRows-1){
                flag = false;
            }
            sblist.get(line).append(s.charAt(i));
            if(flag){
                line++;
            }else{
                line--;
            }
        }
        StringBuilder result = new StringBuilder();
        for (StringBuilder stringBuilder : sblist) {
            result.append(stringBuilder);
        }
        return result.toString();
    }
}